Перейти к основному содержимому

Приложение 4. Комментарии к настройке брокеров сообщений

  1. Комментарии по параметрам конфигурации (activemq.xml)
ПараметрОписание
brokerNameИмя брокера. При использовании в составе сети брокеров необходимо переопределить, например на имя хоста!!! Значение по умолчанию - localhost
offlineDurableSubscriberTimeoutВремя (в миллисекундах), по истечении которого будут удалены неактивные постоянные подписчики. Рекомендуемое значение по умолчанию = 1800000
offlineDurableSubscriberTaskScheduleЧастота проверки неактивных постоянных подписчиков (в миллисекундах). Рекомендуемое значение по умолчанию = 300000
constantPendingMessageLimitStrategyПредотвращает блокировку продюсеров медленными потребителями и влияние на других потребителей, ограничивая кол-во сохраняемых сообщений (штук). Рекомендуемое значение по умолчанию = 1000
<policyEntry topic="SYNC-SERVICE.Topic.>" expireMessagesPeriod="300000"/>Интервал (в мс) между проверками истечения срока действия сообщений для неактивных постоянных подписчиков для топиков сообщений синхронизации Рекомендуемое значение по умолчанию = 300000
<messageAuthorizationPolicy> ... </messageAuthorizationPolicy>Политика авторизации (DevicePolicy) при попытке получить сообщение клиентской частью приложения. delimeter - разделитель в client-id между device_id и значением uuid (используется web-клиентом для подключения к брокеру)

XML-конфигурация

Параметры хранения сообщений

<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

Для standalone брокера

<bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource" destroy-method="close">
<property name="serverName" value="10.12.1.51"/>
<property name="databaseName" value="activemq"/>
<property name="portNumber" value="5000"/>
<property name="user" value="activemq"/>
<property name="password" value="activemq"/>
<property name="dataSourceName" value="postgres"/>
<property name="initialConnections" value="1"/>
<property name="maxConnections" value="100"/>
</bean>

Конфигурация источника данных для брокера, участвующего в сети брокеров с одной и той же технологией хранения (СУБД Postgres)

<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#postgres-ds" lockKeepAlivePeriod="5000">
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>

Для брокера, участвующего в сети брокеров с одной и той же технологией хранения (СУБД Postgres):

  1. dataSource – JDBC источник данных
  2. lockKeepAlivePeriod - продолжительность (в миллисекундах) сохранения блокировки *, если она больше 0
  3. lockAcquireSleepInterval - интервал опроса (в миллисекундах) между попытками получения блокировки

* - Захват брокером роли «master»


Транспорт (протоколы openwire или ssl используются для межсервисного взаимодействия, ws и stomp - для клиентской части приложения)

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616" maximumConnections="1000" wireFormat.maxFrameSize="104857600"/>
<transportConnector name="ssl" uri="ssl://0.0.0.0:61617" trace="true" needClientAuth="true"/>
<transportConnector name="stomp+nio" uri="stomp+nio://0.0.0.0:61613" maximumConnections="30000" wireFormat.maxFrameSize="10485760"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614" maximumConnections="30000" wireFormat.maxFrameSize="10485760"/>
<sslContext
keyStore="file:${activemq.base}/conf/mybroker.ks" keyStorePassword="123456"
trustStore="file:${activemq.base}/conf/mybroker.ts" trustStorePassword="123456"
/>

предназначен для аутентификации межсервисного взаимодействия с использованием ssl (определяется в конфигурации сервисов Valo)


Плагины

1) Плагин аутентификации

Предназначен для аутентификации сервисов VALO Cloud и пользователей.
В списке authURL указаны endpoints Rest-сервисов VALO Cloud, по которым происходит аутентификация клиентов при подключении к брокеру

<bean xmlns="http://www.springframework.org/schema/beans" id="SecBrokerPlugin" class="pro.valo.iqreserve.broker.plugins.SecBrokerPlugin">
<property name="authURL">
<list>
<value>http://10.12.1.22:8080/api/sync/token</value>
<value>http://10.12.1.32:8080/api/sync/token</value>
</list>
</property>
<property name="configuration">
<value>activemq</value>
</property>
</bean>

2) Плагин авторизации в VALO Cloud

Предназначен для проведения процедуры авторизации (по идентификатору и токену пользователя) на получение сообщений
В списке authURL указаны endpoints Rest-сервисы VALO Cloud, по которым происходит авторизация клиентов
В свойстве topic указывается ограничение на количество подписчиков на тот или иной топик (в данном случае – для топиков синхронизации)

<bean xmlns="http://www.springframework.org/schema/beans" id="MaxSubscribersPlugin" class="pro.valo.iqreserve.broker.plugins.MaxSubscribersPlugin">
<!-- Authorization -->
<property name="authURL">
<list>
<value>http://10.12.1.22:8080/api/sync/topic</value>
<value>http://10.12.1.32:8080/api/sync/topic</value>
</list>
</property>
<!-- Max Subscribers per Topic -->
<property name="topics">
<map>
<entry key="SYNC-SERVICE.Topic." value="100" />
</map>
</property>
</bean>

3) Авторизация на уровне брокера

для осуществления операций в очередях и топиках
Здесь authorizationMap - список прав (полномочий) пользователей брокера, не путать с пользователями VALO Cloud

<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue="*.InputQueue" read="publishers" write="publishers" admin="admins,publishers" />
<authorizationEntry queue="*.OutputQueue" read="publishers" write="publishers" admin="admins,publishers" />
<authorizationEntry topic="JMS-SERVICES.CONFIG-CHANGES.Topic" read="publishers" write="publishers" admin="admins,publishers" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins,publishers,tenants" write="admins,publishers,tenants" admin="admins,publishers,tenants" />
<authorizationEntry topic="ActiveMQ.Advisory.Consumer.Topic.SYNC.>" read="admins,tenants" write="admins,tenants" admin="admins,tenants" />
<authorizationEntry topic="SYNC-SERVICE.Topic.>" read="admins,publishers,tenants" write="publishers,admins,tenants" admin="admins,tenants,publishers"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
  1. Комментарии по параметрам окружения (env)
ПараметрОписание
XmsМинимальный размер кучи памяти JVM. По умолчанию 64Мб
XmxМаксимальный размер кучи памяти JVM. По умолчанию 1Gb
org.apache.activemq.transport.nio.SelectorManager.corePoolSizeКоличество потоков, которые нужно сохранить в пуле, даже если они простаивают. Рекомендуемое стартовое значение = 2000
org.apache.activemq.transport.nio.SelectorManager.maximumPoolSizeМаксимальное количество потоков, разрешенных в пуле. Рекомендуемое стартовое значение = 30000
org.apache.activemq.transport.nio.SelectorManager.workQueueCapacityМаксимальная глубина рабочей очереди перед наращиванием пула. Рекомендуемое стартовое значение = 1024
org.apache.activemq.UseDedicatedTaskRunnerИспользование выделенных исполнителей задачи для диспетчеризации сообщений. Рекомендуемое значение по умолчанию = false (будет использоваться внутренний пул потоков для диспетчеризации сообщений)

GC

ПараметрОписание
+UseG1GCВключаем G1 Garbage Collector
+DisableExplicitGCОтключаем вызовы System.gc()
+AlwaysPreTouchОбеспечиваем захват памяти, указанный в Xms
+ScavengeBeforeFullGCДелаем молодой GC до полного

Остальное

ПараметрОписание
+UseStringDeduplicationВключаем дедупликацию строк
-Djava.net.preferIPv4Stack=trueВключаем предпочтение IPv4 над IPv6
+HeapDumpOnOutOfMemoryErrorВызовем дамп кучи при нехватке памяти
OnOutOfMemoryError="shutdown -r"Перезагрузим сервер приложений сразу после возникновения нехватки памяти (при необходимости)